package com.dd.cloud.user.mapper.admin;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dd.cloud.user.entity.admin.AdminUser;
import com.dd.cloud.user.req.admin.GetAdminPageReq;
import com.dd.cloud.user.req.admin.StatisticalMechanDateNodeReq;
import com.dd.cloud.user.req.mechan.MechanRankPresStatisticalReq;
import com.dd.cloud.user.req.mechan.MechanRankSelectStatisticalReq;
import com.dd.cloud.user.res.admin.*;
import com.dd.cloud.user.res.mechan.MechanRankPresRes;
import com.dd.cloud.user.res.mechan.MechanRankSelectRes;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 管理员用户 Mapper 接口
 * </p>
 *
 * @author czg
 * @since 2022-04-27
 */
public interface AdminUserMapper extends BaseMapper<AdminUser> {

    /**
     * 查询管理员详细信息
     * @param id
     * @return
     */
    AdminUserDetailRes getUserDeatil(Integer id);

    /**
     * 分页查询管理员
     * @param page
     * @param req
     * @return
     */
    Page<AdminUserRes> getAdminUserPage(Page page, GetAdminPageReq req);

    /**
     * 获取统计用户数量
     * @return
     */
    StatisticalUserNumRes getStatisticalUserNum();

    /**
     * 统计机构省份地址和医生数量
     * @return
     */
    List<StatisticalMechanAddrRes> getStatisticalMechanAddr();

    /**
     * 统计机构开方数量及总数量
     * @return
     */
    List<StatisticalMechanPresRes> getStatisticalMechanPres(String timeType);

    /**
     * 查询机构类型数量占比
     * @return
     */
    List<StatisticalMechanTypeRes> getStatisticalMechanType();

    /**
     * 查询各个时间维度的机构处方数量
     * @return
     */
    List<StatisticalNodeRes> getStatisticalMechanDateNode(@Param("req") StatisticalMechanDateNodeReq req);

    /**
     * 查询各个时间维度的地区机构处方数量
     * @return
     */
    List<StatisticalNodeRes> getStatisticalMechanDateArea(@Param("req") StatisticalMechanDateNodeReq req);

    /**
     * 获取机构选择列表
     * @param req
     * @return
     */
    List<MechanRankSelectRes> getMechanSelect(@Param("req") MechanRankSelectStatisticalReq req);

    /**
     * 获取机构处方图表数据
     * @param req
     * @return
     */
    List<MechanRankPresRes> getMechanPresDay(@Param("req") MechanRankPresStatisticalReq req);

    /**
     * 查找区域机构数量占比
     * @return
     */
    List<StatisticalMechanRegionRes> getStatisticalMechanRegion();
}
